#ifndef ALMACENAMIENTO_H_
#define ALMACENAMIENTO_H_

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>
#include <fcntl.h>
#include <sys/stat.h>
#include "definiciones.h"
#include "funcionesFat32.h"
#include "TADComunicacion.h"
#include "utils.h"

char *pedir_bloque(uint32_t ,int32_t );
uint32_t *obtener_fat(t_fs *, uint16_t , uint32_t , int32_t );
char *obtener_cluster(t_fs *, uint32_t ,uint32_t );
int32_t escribir_cluster(t_fs* , int32_t ,char* , int32_t );
int32_t escribir_bloque(int32_t ,char *, int32_t );


	////CACHE DE ARCHIVOS////
char *leer_cluster_cache_archivo(t_fs *, t_elemento *,int32_t ,int32_t );
void escribir_cluster_cache_archivo(t_fs *, t_elemento *,int32_t ,char *,int32_t );
int32_t esta_en_cache(t_cache *,uint32_t ,t_cache** );
void actualizar_cache(t_fs * ,t_elemento *,uint32_t ,char *, int32_t , int32_t);
void reemplazarMenor(t_fs *, t_cache *,int32_t ,char* ,int32_t , int32_t );
void flush(t_fs*, t_elemento*,int32_t);

///cache global///
void escribir_cluster_cacheG(t_fs *, int32_t ,char *,int32_t );
char *obtener_cluster_cacheG(t_fs *,uint32_t , int32_t );
void actualizar_cache_global(t_fs* , uint32_t ,char *, int32_t , int32_t );
int32_t esta_en_cache_global(uint32_t );
void flush_cache_global(t_fs *,int32_t );


#endif /* ALMACENAMIENTO_H_ */
